﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using System.Web.Security;
using IndignadoFramework.BackBone.Model;
using IndignadoFramework.BackBone.InternalServices;
using IndignadoFramework.BackBone.InternalServices.Implementacion;
using IndignadoFramework.FrontOffice.Services;
using System.IO;
using IndignadoFramework.FrontOffice.Models;

namespace IndignadoFramework.FrontOffice.Controllers
{
    public class ConvocatoriaController : SiteController
    {
        private ConvocatoriaServices _convocatorias;
        private UsuarioServices _usuarios;
        private MovimientoServices _movimientoI;
        private CategoriaTematicaServices _categoriasTematicas;

        public ConvocatoriaController(){
           _convocatorias = new ConvocatoriaServicesImpl();
           _usuarios = new UsuarioServicesImpl();
           _movimientoI = new MovimientoServicesImpl();
           _categoriasTematicas = new CategoriaTematicaServicesImpl();
        }

        public ConvocatoriaController(ConvocatoriaServices conv, UsuarioServices usu, MovimientoServices mov,CategoriaTematicaServices catTem)
        {
            _convocatorias = conv;
            _usuarios = usu;
            _movimientoI = mov;
            _categoriasTematicas = catTem;
        }

        //
        // GET: /Convocatoria/
        [HttpGet]
        [Authorize]
        public ActionResult NuevaConvocatoria()
        {
            if (Site != null)
            {
                ViewBag.Galeria = _movimientoI.getListaImagenesGaleria(Site.Id);
                ViewBag.MovimientoId = Site.Id;
                ViewBag.MovimientoNombre = Site.MovimientoNombre;
                ViewBag.MovimientoDescripcion = Site.MovimientoDescripcion;
                ViewBag.CategoriasTematicas = _categoriasTematicas.getCategoriasTematicasLista(Site.Id);

            }
            return PartialView();
        }

        //
        // POST: /Convocatoria/NuevaConvocatoria

        [HttpPost]
        [Authorize]
        public ActionResult NuevaConvocatoria(ConvocatoriaCreateModel model)
        {
            if (ModelState.IsValid)
            {
                string mimeType = Request.Files["ConvocatoriaLogo"].ContentType;
                Stream fileStream = Request.Files["ConvocatoriaLogo"].InputStream;
                string fileName = Path.GetFileName(Request.Files["ConvocatoriaLogo"].FileName);
                int fileLength = Request.Files["ConvocatoriaLogo"].ContentLength;
                byte[] logo = new byte[fileLength];
                fileStream.Read(logo, 0, fileLength);

                ConvocatoriaModel conv = new ConvocatoriaModel();
                
                conv.CategoriaTematicaId = model.CategoriaTematicaId;
                conv.ConvocatoriaTitulo = model.ConvocatoriaTitulo;
                conv.ConvocatoriaFechaInicio = model.ConvocatoriaFechaInicio;
                conv.ConvocatoriaFechaFin = model.ConvocatoriaFechaFin;
                conv.ConvocatoriaDetalle = model.ConvocatoriaDetalle;
                conv.ConvocatoriaQuorum = model.ConvocatoriaQuorum;
                conv.ConvocatoriaUbicacionX = model.ConvocatoriaUbicacionX;
                conv.ConvocatoriaUbicacionY = model.ConvocatoriaUbicacionY;
                conv.ConvocatoriaLogo = logo;
                conv.MovimientoId = Site.Id;
                                
                int convId = _convocatorias.addConvocatoria(conv);
                _convocatorias.notificarUsuario(Int32.Parse(User.Identity.Name), convId, "[" + Site.MovimientoNombre + "] Nueva Convocatoria", "Estimado usuario de " + Site.MovimientoNombre + ",<br /><br />" +
                    "Se ha creado una nueva convocatoria de nombre \"" + conv.ConvocatoriaTitulo + "\", la cual puede ser de su interés.<br /><br />" +
                    "Por más información visite:<br />http://" + Site.MovimientoHost + "/Convocatoria/ConvocatoriaDetalle?convocatoriaId=" + convId);
                return RedirectToAction("Index", "Home");
            }
            if (Site != null)
            {
                ViewBag.Galeria = _movimientoI.getListaImagenesGaleria(Site.Id);
                ViewBag.MovimientoId = Site.Id;
                ViewBag.MovimientoNombre = Site.MovimientoNombre;
                ViewBag.MovimientoDescripcion = Site.MovimientoDescripcion;
                ViewBag.CategoriasTematicas = _categoriasTematicas.getCategoriasTematicasLista(Site.Id);

            }
            return PartialView(model);
        }

        public PartialViewResult Listar()
        {
            IEnumerable<ConvocatoriaModel> convocatorias = _convocatorias.listarConvocatorias(Site.Id);
            return PartialView(convocatorias);
        }

        public ActionResult ConvocatoriaDetalle(int convocatoriaId)
        {
            ConvocatoriaModel convocatoriaModel = _convocatorias.getConvocatoria(convocatoriaId);
            if (Site != null)
            {
                ViewBag.Galeria = _movimientoI.getListaImagenesGaleria(Site.Id);
                ViewBag.MovimientoId = Site.Id;
                ViewBag.MovimientoNombre = Site.MovimientoNombre;
                ViewBag.MovimientoDescripcion = Site.MovimientoDescripcion;
            }
            if (Request.IsAuthenticated)
                ViewBag.asistira = _usuarios.asistiraUsuario(Int32.Parse(User.Identity.Name), convocatoriaModel);
            return PartialView(convocatoriaModel);
        }

        [Authorize]
        public ActionResult AsistirConvocatoria(int convocatoriaId)
        {
            ConvocatoriaModel convocatoriaModel = _convocatorias.getConvocatoria(convocatoriaId);
            _usuarios.asistirConvocatoria(Int32.Parse(User.Identity.Name), convocatoriaModel);
            return RedirectToAction("ConvocatoriaDetalle", "Convocatoria", new { convocatoriaId = convocatoriaId } );
        }
    }
}